let list = [1, 5, [9, 8], [2, [1, 9, [10, 11, [12, 13]]]], 7];
//第一种方法
console.log(list.toString().split(","));

//第二种方法
function flatten(list) {
  return list.reduce((prev, item) => {
    return prev.concat(Array.isArray(item) ? flatten(item) : item);
  }, []);
}

//数组扁平化 带depth

function _flat(array, depth) {
  if (!Array.isArray(array) || depth <= 0) {
    return arrar;
  }

  return array.reduce((prev, cur) => {
    if (Array.isArray(cur)) {
      return prev.concat(_flat(cur, depth - 1));
    } else {
      return prev.concat(cur);
    }
  }, []);
}

//数组 一级扁平化

function flatten111(arr) {
  return arr.reduce((pre, cur) => {
    return pre.concat(cur)
  }, [])
}

//完全扁平化
function flattenDep(arr) {
  return arr.reduce((pre, cur) => {
    return pre.concat(Array.isArray(cur) ? flattenDep(cur) : cur)
  }, [])
}


//自定义层级扁平化
function flattenDth(arr, depth) {

  function depthFn(array, dep) {
    dep--
    return array.reduce((pre, cur) => {
      return pre.concat(Array.isArray(cur) && dep > 0 ? depthFn(cur, dep) : cur)
    }, [])
  }

  return depthFn(arr, depth)
}


function _flat1(arr, depth) {
  if (!Array.isArray(arr) || depth <= 0) {
    return arr
  }
  return arr.reduce((pre, cur) => {
    if (Array.isArray(cur)) {
      return pre.concat(_flat1(cur, depth - 1))
    } else {
      return pre.concat(cur)
    }
  }, [])
}



console.log("一级", flatten111(list));
console.log("完全", flattenDep(list));
console.log("自定义", flattenDth([], 4));
console.log("自定义", _flat1([], 4));